import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
import os
path='./'
file_list=os.listdir(path)
print ("file_list: {}".format(file_list))
print('\n')
print('file 개수: {}'.format(len(file_list)-2))
# 파일 불러오기
case=pd.read_csv('./Case.csv',header=0)
patientinfo=pd.read_csv('./Patientinfo.csv',header=0)
patientroute=pd.read_csv('./PatientRoute.csv',header=0)
region=pd.read_csv('./Region.csv',header=0)
search_trend=pd.read_csv('./SearchTrend.csv',header=0)
seoul_floating=pd.read_csv('./SeoulFloating.csv',header=0)
time=pd.read_csv('./Time.csv',header=0)
time_age=pd.read_csv('./TimeAge.csv',header=0)
time_gender=pd.read_csv('./TimeGender.csv',header=0)
time_province=pd.read_csv('./TimeProvince.csv',header=0)
weather=pd.read_csv('./Weather.csv',header=0)
- latitude: 위도, longitude: 경도
region.head(1)
# region.csv 에서 광역시/도 데이터만 추출
region_province=region[region['province']==region['city']]
region_province=region_province.iloc[:-1,:]
# 가장 최근(2020년 4월 13일) 현황
present_province=time_province[time_province['date']=='2020-04-13']
present_province.shape
import folium
import json
folium.__version__
geo_path = './TL_SCCO_SIG.json'
geo_str = json.load(open(geo_path, encoding='utf-8'))
# 전국 확진자수
center= [37.541, 126.986]
province_patients=pd.merge(present_province,region_province,how='left')
map_province=folium.Map(location=center, zoom_start=7)
for n in province_patients.index:
folium.CircleMarker([province_patients['latitude'][n],province_patients['longitude'][n]]
,radius=province_patients['confirmed'][n]/80,
color='#3186cc',fill_color='#3186cc').add_to(map_province)
map_province
- province: 광역시/도
- city: 시/군/구
- group: 집단감염여부 -> True: 집단감염, False: 집단감염 아님
- infection_case: 감염경로
- confirmed: 확진자수
print(case.shape)
case.head(1)
case['group'].value_counts()
case_province=pd.DataFrame(case.groupby(['province','group'])['confirmed'].sum())
case_province=case_province.reset_index()
case_province
plt.figure(figsize=(30,10))
ax=sns.barplot(data=case_province,x='province',y='confirmed',hue='group',ci=None,palette='Blues')
plt.title('Province-Number of confirmed patients',fontsize=20)
plt.legend(loc='upper left')
plt.show()
- disease: 기저질환
- infection_order: n차 감염
- infected_by: 누구에게 감염되었는지
- symptom_onset_date: 증상시작일
- released_date: 격리해제일
- deceased_datte: 사망일
- state: 현재 상태
patientinfo.head(1)
daegu_patient=patientinfo[patientinfo['province']=='Daegu']
daegu_patient.groupby(['infection_case'])['patient_id'].count().to_frame().reset_index()
# 서울 확진자 정보 추출
seoul_patient=patientinfo[patientinfo['province']=='Seoul']
# '구' 별로 확진자수 높은 순서인 dataframe 만들기
seoul_city_patient=seoul_patient.groupby(['city'])['patient_id'].count().to_frame().reset_index().sort_values(['patient_id'],ascending=False)
plt.figure(figsize=(35,10))
ax=sns.barplot(data=seoul_city_patient,x='city',y='patient_id',ci=None,palette='Blues')
plt.title('Seoul city number of patients',fontsize=20)
plt.show()
seoul_infection_case=seoul_patient.groupby(['infection_case'])['patient_id'].count().to_frame().reset_index().sort_values(['patient_id'],ascending=False)
plt.pie(seoul_infection_case['patient_id'],
labels=seoul_infection_case['infection_case'],
autopct='%0.1f%%',shadow=True,colors=['thistle','plum','violet','purple','hotpink','pink','lavenderblush'])
plt.show()
seoul_floating.head(3)
seoul_floating['date']=pd.to_datetime(seoul_floating['date'])
seoul_floating['month']=seoul_floating['date'].dt.month
# 1월 유동인구
seoul_floating_1=seoul_floating[seoul_floating['month']==1]
# 2월 유동인구
seoul_floating_2=seoul_floating[seoul_floating['month']==2]
# 평균 유동인구 (2월)
seoul_group_feb=seoul_floating_2.groupby(['city'])['fp_num'].mean().to_frame().reset_index()
# '동작구' 가 뒤에서 나올 geojason 파일과 스펠링이 다르기 때문에 맞춰준다.
seoul_group_feb.replace(seoul_group_feb['city'][2],'Dongjak-gu',inplace=True)
# 서울시 중심부의 위도, 경도
center = [37.541, 126.986]
# 맵이 center 에 위치하고, zoom 레벨은 11로 시작하는 맵을 만든다
m = folium.Map(location=center, zoom_start=11)
# Choropleth 레이어를 만들고, 맵 m에 추가한다
folium.Choropleth( geo_data=geo_str,
data=seoul_group_feb,
columns=('city', 'fp_num'),
key_on='feature.properties.SIG_ENG_NM',
fill_color='BuPu',
legend_name='평균유동인구수').add_to(m)
m
seoul_patient_float=pd.merge(seoul_city_patient,seoul_group_feb,how='left')
seoul_patient_float.drop(2,axis=0,inplace=True)
seoul_patient_float.corr()
# Region 파일에서 서울만 가져오기: region_seoul 생성
region_seoul=region[region['province']=='Seoul']
region_seoul.drop(0,axis=0,inplace=True)
seoul_patient_region=pd.merge(seoul_city_patient,region_seoul,how='left')
seoul_patient_region.drop(2,axis=0,inplace=True)
folium.Choropleth( geo_data=geo_str,
data=seoul_group_feb,
columns=('city', 'fp_num'),
key_on='feature.properties.SIG_ENG_NM',
fill_color='BuPu',
legend_name='평균유동인구수')
for n in seoul_patient_region.index:
folium.CircleMarker([seoul_patient_region['latitude'][n],seoul_patient_region['longitude'][n]]
,radius=seoul_patient_region['patient_id'][n]/5,
color='firebrick',fill_color='firebrick').add_to(m)
m